﻿using CnControls;
using UnityEngine;

namespace CustomJoystick
{
    public class FourWay2DController : MonoBehaviour
    {
        private Vector3[] directionalVectors = { Vector3.up, Vector3.down , Vector3.right, Vector3.left };

        private Transform _mainCameraTransform;


        public Vector3 Now_transformedDirection;

        public float moveSpeed;
        private void Awake()
        {
            Now_transformedDirection = new Vector3(0, 0, 0);
            _mainCameraTransform = Camera.main.transform;
        }


        Vector2 CheckPosIsInWSAD( Vector2  _pos )
        {
            //如果 x,y点 在 某区域内   那么返回，，，
            //如果 y > - x  并且 y > x 返回  0，1       上面扇形区域

            if (_pos.y > -_pos.x && _pos.y > _pos.x)
            {
                return new Vector2(0, 1);
            }

            //如果 y < x 并且 y < - x  返回  0, -1      下面扇形区域
            else if (_pos.y < _pos.x && _pos.y < -_pos.x)
            {
                return new Vector2(0, -1);
            }
            //如果  y > x 并且  y < -x 返回  -1, 0      左边扇形区域
            else if (_pos.y > _pos.x && _pos.y < -_pos.x)
            {
                return new Vector2(-1, 0);
            }
            //如果  y < x 并且  y > -x  返回  1，0      右边扇形区域
            else if (_pos.y < _pos.x && _pos.y > -_pos.x)
            {
                return new Vector2(1, 0);
            }
            else
            {
                return Vector2.zero;
            }
        }


        public float movespeed;
        private void Update()
        {
            Vector2 tempPos = new Vector2(CnInputManager.GetAxis("Horizontal"), CnInputManager.GetAxis("Vertical"));

            Vector2 endPos = CheckPosIsInWSAD(tempPos);
            Now_transformedDirection = new Vector3( endPos.x,endPos.y, 0 )  ;

            this.transform.Translate(Now_transformedDirection * Time.deltaTime * movespeed);
            /*锁定旋转，防治碰撞产生倾斜角度感觉*/
            this.gameObject.transform.rotation = new Quaternion(0f, 0f, 0f, 0f);
            // var movementVector = new Vector3(  CnInputManager.GetAxis("Horizontal"), CnInputManager.GetAxis("Vertical"), 0f );

            // Debug.Log( "Horizontal:"+ CnInputManager.GetAxis("Horizontal") + "  Vertical:" + CnInputManager.GetAxis("Vertical"));
            // if( movementVector != Vector3.zero)
            // {
            //    // if( movementVector.x >0  )
            //    //判定点是否在 （xx）,(yy)区域内 来 判定 上下左右，，
            // }
            // if(movementVector == Vector3.zero)
            // {
            //     Now_transformedDirection = Vector3.zero;
            //     return;
            // }

            // //Debug.Log("moveVector:"+ movementVector);
            // if (movementVector.sqrMagnitude < 0.00001f)
            // {
            //     Now_transformedDirection = Vector3.zero;
            //     return;
            // }



            // // Clamping
            // Vector3 closestDirectionVector = directionalVectors[0];
            // //Vector3.Dot也叫点积，它返回1个-1.0～1.0之间的一个值。
            // //表示返回进行Dot计算的两个向量之间的夹角的余弦值(Cos弧度角).要注意的是能进行Dot计算的前提是两个向量首先要变成单位向量！
            // float closestDot = Vector3.Dot(movementVector, closestDirectionVector);
            // for (int i = 1; i < directionalVectors.Length; i++)
            // {
            //     float dot = Vector3.Dot(movementVector, directionalVectors[i]);
            //     if (dot < closestDot)
            //     {
            //         closestDirectionVector = directionalVectors[i];
            //         closestDot = dot;
            //     }
            // }

            // // closestDirectionVector is what we need
            // //比如，可以把世界坐标中有一个点，可以用Transform.InverseTransformDirection方法，把世界坐标中的这个点变换成 某个物体的本地坐标的点！
            // var transformedDirection = _mainCameraTransform.InverseTransformDirection(closestDirectionVector);
            // transformedDirection.z = 0f;
            // transformedDirection.Normalize();

            //// transform.position += transformedDirection * Time.deltaTime * moveSpeed;
            // Now_transformedDirection = transformedDirection;
            // Debug.Log("最终选定的方向:"+ transformedDirection);
        }
    }
}
